home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
DS-CD ROM 2 1993 August
/
DS CD-ROM 2.Ausgabe (August 1993).iso
/
programm
/
ds0257
/
doc.exe
/
DOSIO.DOC
< prev
next >
Wrap
Text File
|
1992-02-15
|
13KB
|
334 lines
─────────────────────────────────────────────────────────────────────────────
Dokumentation zur Datei: DOSIO.INC
─────────────────────────────────────────────────────────────────────────────
DOSIO.INC - Routinen zum Lesen und Schreiben von Zeichen und
Strings von der Standard-Eingabe bzw. auf die
Standard-Ausgabe (oder anderen Geräten bzw. Dateien)
über die DOS-Funktionen zur Dateibearbeitung mit
Handles.
(für den Assembler A86)
(c) Bernd Schemmer 1990 - 1992
Letzter Update: 14.02.1992
■ Variablen:
------------
InputHandle
Wort, Handle für die Routinen zum Lesen.
Normalerweise enthält dieses Wort den Wert 0 (für STDIn),
durch Ändern des Wertes können die Routinen aber auch
zum Lesen aus einer Datei oder von einem Gerät benutzt
werden.
OutputHandle
Wort, Handle für die Routinen zum Schreiben.
Normalerweise enthält dieses Wort den Wert 1 (für STDOut),
durch Ändern des Wertes können die Routinen aber auch
zum Schreiben in eine Datei oder auf ein Gerät (z.B. in den
Error-Kanal) benutzt werden.
■ Routinen:
-----------
DOSReadStr - Liest einen String
DOSReadChar - Liest ein Zeichen
DOSWriteChar - Schreibt ein Zeichen
DOSWritelnChar - Schreibt ein Zeichen mit Zeilenvorschub
DOSWriteStr - Schreibt einen String
DOSWritelnStr - Schreibt einen String mit Zeilenvorschub
DOSCheckOutput - Überprüft, ob noch Zeichen ausgegeben werden
können
DOSCheckInput - Überprüft, ob noch Zeichen zur Verfügung stehen
DOSCheckSTDOut - Überprüft, ob die Ausgabe auf ein Gerät oder
in eine Datei geht
DOSCheckSTDIn - Überprüft, ob die Eingabe von einem Gerät oder
aus einer Datei kommt
DOSCheckHandle - Überprüft, ob ein Handle für eine Datei oder
für ein Gerät benutzt wird
DOSSetHandleMode - Setzt den Cooked- oder Raw-Modus für ein Gerät
■ EQU-Anweisungen für die Standard-Ein/Ausgabe-Kanäle
STDIn EQU 0
STDOut EQU 1
STDErr EQU 2
STDAux EQU 3
STDPrint EQU 4
----------------------------
DOSCheckSTDIn
Funktion: Ermittelt, ob das von den Routinen zum Lesen von
Zeichen und Strings benutzte Handle für eine
Datei oder für ein Gerät benutzt wird.
Eingabe: [cs:InputHandle]
Ausgabe: CF = 0 ->> okay
ZF = 1 ->> Eingabe kommt aus einer Datei
ZF = 0 ->> Eingabe kommt von einem Gerät
BX = InputHandle
DX = Attribute des Handles
Aufbau: siehe DOSCheckHandle
CF = 1 ->> Fehler
AX = DOS-Fehlernummer
----------------------------
DOSCheckSTDOut
Funktion: Ermittelt, ob das von den Routinen zum Schreiben von
Zeichen und Strings benutzte Handle für eine Datei
oder für ein Gerät benutzt wird.
Eingabe: [cs:OutputHandle]
Ausgabe: CF = 0 ->> okay
ZF = 1 ->> Ausgabe geht in eine Datei
ZF = 0 ->> Ausgabe geht auf ein Gerät
BX = OutputHandle
DX = Attribute des Handles
Aufbau: siehe DOSCheckHandle
CF = 1 ->> Fehler
AX = DOS-Fehlernummer
----------------------------
DOSCheckHandle
Funktion: Ermittelt, ob ein Handle für ein Gerät oder für
eine Datei benutzt wird
Eingabe: BX = Handle einer offenen Datei oder eines geöffneten
Geräts
Ausgabe: CF = 0 ->> okay
ZF = 1 ->> Handle steht für eine Datei
ZF = 0 ->> Handle steht für ein Gerät
DX = Attribute des Handles
CF = 1 ->> Fehler
AX = DOS-Fehlernummer
■ Aufbau des Attributes:
Bit | Bedeutung für Dateien
-------+------------------------------------------------------------
0 - 5 | Nummer des logischen Laufwerkes auf dem sich die Datei
| befindet (0 = A:, 1 = B:, usw.)
6 | falls 1: in die Datei wurde noch nicht geschrieben
| falls 0: in die Datei wurde schon geschrieben
7 | für Dateien immer 0
8 - 13 | nicht benutzt, sollten 0 sein
15 | für Dateien immer 0
|
Bit | Bedeutung für Geräe
-------+------------------------------------------------------------
0 | falls 1: Gerät ist die Standard-Eingabe
1 | falls 1: Gerät ist die Standard-Ausgabe
2 | falls 1: Gerät ist das NUL-Device
3 | falls 1: Gerät ist das CLOCK$-Device
4 | falls 1: Das Gerät verwendet den Interrupt 29h für die
| Zeichenausgabe
5 | falls 1: Das Gerät wird im Raw-Modus betrieben, d.h. DOS
| führt keinerlei Interpretation von Zeichen durch
| falls 0: Das Gerät wird im Cooked-Modus betrieben, d.h. die
| Zeichen CTRL-Z, CTRL-C, CTRL-P und RETURN werden
| von DOS interpretiert
6 | falls 1: das Gerät kann Daten liefern
| falls 0: das Gerät liefert bei Leseversuchen nur EOF
7 | für Geräte immer 1
8 | unbekannt
9 | unbenutzt
10 | unbenutzt
11 | falls 1: der Treiber unterstützt die Funktionen Open und Close
12 | falls 1: das Gerät wird über ein Netzwerk betrieben
13 | falls 1: das Gerät unterstützt 'Output until busy'
14 | falls 1: das Gerät unterstützt die IOCTL-Funktionen
| 4402h und 4403h
15 | für Geräte immer 1
|
----------------------------
DOSSetHandleMode
Funktion: Verändern des Modus eines Handles (Cooked- oder Raw-Modus)
Eingabe: BX = Handle
AL = 0 ->> Cooked-Modus setzen
AL = 1 ->> Raw-Modus setzen
Ausgabe: CF = 0 ->> okay
CF = 1 ->> Fehler
AX = DOS-Fehlernummer
Bes.: Der Modus kann nur für Geräte geändert werden, für Dateien
wird immer die DOS-Fehlernummer 1 zurück geliefert.
Jedes zeichenorientierte Gerät (auch der Drucker!) wird von
DOS im Cooked-Modus (d.h. mit Interpretation der Zeichen
durch DOS) eröffnet.
Falls die Standard-Eingabe im Cooked-Modus betrieben wird,
gibt DOS jedes gelesene Zeichen sofort auf die Standard-
Ausgabe aus und interpretiert (u.a.) die Taste RETURN
als Ende der Eingabe (->> die angeforderte Anzahl Zeichen
ist nur ein Maximal-Wert).
Falls die Standard-Eingabe im Raw-Modus betrieben wird,
gibt DOS die gelesenen Zeichen NICHT auf die Standard-
Ausgabe auf und wartet grundsätzlich so lange, bis die
angeforderte Anzahl Zeichen gelesen wurden (->> die
angeforderte Anzahl Zeichen muß eingegeben werden).
Achtung: Falls der Modus der immer offenen Handles
(STDin, STDOut, STDErr, STDPrint und STDAux)
geändert wird, sollte er vor dem Programmende
vom Programm auf den ursprünglichen Wert
gesetzt werden, da DOS diesen Wert NICHT
restauriert.
----------------------------
DOSCheckOutput
Funktion: Überprüft, ob noch Zeichen ausgegeben werden können
Eingabe: [cs:OutputHandle]
Ausgabe: CF = 0 ->> okay
ZF = 1 ->> keine Zeichen mehr ausgebbar
ZF = 0 ->> noch Zeichen ausgebbar
CF = 1 ->> Fehler
AX = DOS-Fehlernummer
Bes.: Die Routine liefert für Dateien IMMER den Status 'noch
Zeichen ausgebbar'.
----------------------------
DOSCheckInput
Funktion: Testet, ob noch Zeichen verfügbar sind
Eingabe: [cs:InputHandle]
Ausgabe: CF = 0 ->> okay
ZF = 1 ->> kein Zeichen mehr verfügbar
ZF = 0 ->> noch Zeichen verfügbar
CF = 1 ->> Fehler
AX = DOS-Fehlernummer
Bes.: Benutzt die undokumentierte Funktion 52h und den
undokumentierten DIB (falls das Handle für die
Standard-Eingabe verwendet wird, da die Routine
auch den DOS-internen Puffer für die Standard-
Eingabe überprüft).
----------------------------
DOSReadStr
Funktion: Lesen eines Strings (mit Längenzähler)
Eingabe: DS:SI -> Puffer für den String
CL = max. Länge für den String
[cs:InputHandle]
Ausgabe: CF = 0 ->> String ist im Puffer
AL = Länge des gelesenen Strings
CF = 1 ->> Fehler
AX = DOS-Fehlernummer
Bes.: Die wirkliche Anzahl gelesener Zeichen kann der Länge
des zurückgelieferten Strings entnommen werden.
Falls diese auf 0 steht, war kein Zeichen verfügbar.
CR und LF werden nur am Ende des eingegebenen Strings
überlesen, d.h. falls die Eingabe aus einer Datei kommt,
können durchaus mehrere durch CR/LF getrennte Zeilen auf
einmal gelesen werden!
Siehe auch Bemerkungen zu 'DOSSetHandleMode'
----------------------------
DOSWritelnStr
Funktion: Schreiben eines Strings mit Zeilenvorschub
Eingabe: DS:SI -> auszugebender String
[cs:OutputHandle]
Ausgabe: CF = 0 ->> ZF = 1 ->> okay
ZF = 0 ->> es konnten nicht alle Zeichen
geschrieben werden. Die Anzahl
der geschriebenen Bytes steht
im Register AX.
CF = 1 ->> Fehler
AX = DOS-Fehlernummer
----------------------------
DOSWriteStr
Funktion: Schreiben eines Strings
Eingabe: DS:SI -> auszugebender String
[cs:OutputHandle]
Ausgabe: CF = 0 ->> ZF = 1 ->> okay
ZF = 0 ->> es konnten nicht alle Zeichen
geschrieben werden. Die Anzahl
der geschriebenen Bytes steht
im Register AX.
CF = 1 ->> Fehler
AX = DOS-Fehlernummer
----------------------------
DOSReadChar
Funktion: Lesen eines Zeichens
Eingabe: [cs:InputHandle]
Ausgabe: CF = 0 ->> okay
AL = 0 ->> kein Zeichen verfügbar
sonst: AL = Zeichen
CF = 1 ->> Fehler
AX = DOS-Fehlernummer
Bes.: Siehe auch Bemerkungen zu 'DOSSetHandleMode'
----------------------------
DOSWriteChar
Funktion: Schreiben eines Zeichens
Eingabe: AL = Zeichen
[cs:OutputHandle]
Ausgabe: CF = 0 ->> okay
ZF = 1 ->> Zeichen geschrieben
ZF = 0 ->> Zeichen konnte nicht
geschrieben werden
CF = 1 ->> Fehler
AX = DOS-Fehlernummer
----------------------------
DOSWriteLnChar
Funktion: Schreiben eines Zeichens mit Zeilenvorschub
Eingabe: AL = Zeichen
[cs:OutputHandle]
Ausgabe: CF = 0 ->> okay
ZF = 1 ->> Zeichen geschrieben
ZF = 0 ->> Zeichen konnte nicht
geschrieben werden
CF = 1 ->> Fehler
AX = DOS-Fehlernummer